<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>去重复元素</title>
</head>
<body>

</body>
<script>

    // 方法一：从数组末尾的元素开始循环
    document.write("<p></p>方法一：从数组末尾的元素开始循环<p></p>")
    let arr = [1, 2, 2, 2, 6, 6, 4, 8, 4]
    for (let i = arr.length - 1; i >= 0; i--) {
        // console.log(i +"s"+ arr[i])
        for (let j = i - 1; j >= 0; j--) {
            if (arr[i] === arr[j]) {
                arr.splice(j, 1)
            }
        }
    }
    for (let i = 0; i < arr.length; i++) {
        document.write(" " + arr[i])
    }
    document.write("<p></p>方法二(1)：从数组开始的元素开始循环(向当前元素的前方判断,不满足则向后移动继续向后判断)<p></p>")

    // 方法二：从数组开始的元素开始循环
    let arr1 = [1, 2, 2, 2, 6, 6, 4, 8, 4]
    for (let i = 0; i < arr1.length; i++) {
        // console.log(i +"s"+ arr[i])
        for (let j = i + 1; j < arr1.length; j++) {
            if (arr1[i] === arr1[j]) {
                arr1.splice(j, 1)
                j--
            }
        }
    }
    for (let i = 0; i < arr1.length; i++) {
        document.write(" " + arr1[i])
    }
    document.write("<p></p>方法二(2)：从数组开始的元素开始循环(向当前元素的前方判断,不满足则向后移动继续向前判断)<p></p>")

    // 方法二：从数组开始的元素开始循环
    let arr2 = [1, 2, 2, 2, 6, 6, 4, 8, 4]
    for (let i = 0; i < arr2.length; i++) {
        // console.log(i +"s"+ arr[i])
        for (let j = i - 1; j >= 0; j--) {
            if (arr2[i] === arr2[j]) {
                arr2.splice(j, 1)
                j++
            }
        }
    }
    for (let i = 0; i < arr2.length; i++) {
        document.write(" " + arr2[i])
    }

    /* 方法三：语法：string.indexOf(searchValue, [Index])
    searchValue：要搜索的字符串值。
    Index（可选）：指定搜索的起始位置。如果未提供此参数，则默认从索引0开始搜索。
    返回值：如果找到匹配的元素，则返回第一次出现的索引值；如果没有找到匹配的元素，则返回-1。
   */
    document.write("<p></p>方法三：使用indexOf()方法<p></p>")
    let arr3 = [1, 2, 2, 2, 6, 6, 4, 8, 4]
    let newArr = []
    for (let i = 0; i < arr3.length; i++) {
        if (arr3.indexOf(arr3[i], i + 1) === -1) {
            newArr.push(arr3[i])
        }
    }
    for (let i = 0; i < newArr.length; i++) {
        document.write(" " + newArr[i])
    }

    /*
        方法四：map()方法：
        语法：array.map(callback,[ thisArg])
        callback：一个回调函数，用于处理每个数组元素。该函数可以接受三个参数：
        currentValue：当前正在处理的元素。
        index：当前元素的索引。
        array：原始数组本身。
        回调函数应该返回经过处理后的值，这些值将组成新的数组。
        thisArg（可选）：可在回调函数中作为this关键字使用的对象。
       例题：
        const numbers = [1, 2, 3, 4, 5];

        // 对数组中的每个元素进行平方操作
        const squaredNumbers = numbers.map((num) => num * num);
        console.log(squaredNumbers); // 输出: [1, 4, 9, 16, 25]

        // 将字符串数组中的每个元素转换为大写
        const names = ["John", "Jane", "Alice"];
        const uppercaseNames = names.map((name) => name.toUpperCase());
        console.log(uppercaseNames); // 输出: ["JOHN", "JANE", "ALICE"]

        返回值：一个新的数组，其中包含每个元素经过回调函数处理后的结果
    * */
    document.write("<p></p>方法四：map()方法<p></p>")
    document.write("<p></p>方法使用例子在“删除数组中重复元素”中<p></p>")
</script>
</html>